# 请结合“面向对象编程.md”笔记学习

#【面向过程】
# 用字典（dict）存储数据
valkyrie_1 = { "name":"琪亚娜·卡斯兰娜", "age":16, "role":"半辅半C" }
valkyrie_2 = { "name":"雷电·芽衣", "age":18, "role":"C位" }
valkyrie_3 = { "name":"布洛妮娅", "age":17, "role":"辅助" }
# 定义函数显示女武神信息
def show_inf(valkyrie):
    print("%s：%d，%s" % (valkyrie["name"], valkyrie["age"], valkyrie["role"]))
# 调用该函数
print("=====" *20)
print("面向过程编程")
print("-----" *20)
show_inf(valkyrie_1)
show_inf(valkyrie_2)
show_inf(valkyrie_3)


#【面向对象】
print("=====" *20)
print("面向对象编程")
print("-----" *20)
# （1）类似于C语言结构体的方式来创建
class ValkyrieA:
    """
    【类】女武神信息（A）

    类成员：
    + name：[string 字符串] 女武神的名字
    + age：[int 整型] 女武神的年龄
    + role：[string 字符串] 女武神的定位
    
    类方法：
    + 无
    """
    name = ""
    age = 0
    role = ""

Kiana_Kaslana = ValkyrieA() # 实际上第一个参数是self，不过通常省略了
Kiana_Kaslana.name = "琪亚娜·卡斯兰娜"
Kiana_Kaslana.age = 17
Kiana_Kaslana.role = "半辅半C"
print(Kiana_Kaslana.name, "：", Kiana_Kaslana.age, "，", Kiana_Kaslana.role)

# （2）利用__init__()方法来创建（类似Java中的构造方法）
class ValkyrieB:
    """
    【类】女武神信息（B）

    类成员：
    + name：[string 字符串] 女武神的名字
    + age：[int 整型] 女武神的年龄
    + role：[string 字符串] 女武神的定位
    
    类方法：
    + __init__(self, valkyrie_name, valkyrie_age, valkyrie_role)：初始化方法
    """
    # 由于Python是动态语言，此时可以省略对变量名称的定义
    # name = ""
    # age = 0
    # role = ""

    def __init__(self, valkyrie_name, valkyrie_age, valkyrie_role):
        self.name = valkyrie_name
        self.age = valkyrie_age
        self.role = valkyrie_role

Raiden_Mei = ValkyrieB("雷电·芽衣", 18, "C位")
print(Raiden_Mei.name, "：", Raiden_Mei.age, "，", Raiden_Mei.role)

# （3）利用类的方法将print封装起来
class ValkyrieC:
    """
    【类】女武神信息（C）

    类成员：
    + name：[string 字符串] 女武神的名字
    + age：[int 整型] 女武神的年龄
    + role：[string 字符串] 女武神的定位
    
    类方法：
    + __init__(self, valkyrie_name, valkyrie_age, valkyrie_role)
    + show_inf(self)：显示女武神的信息
    """
    def __init__(self, valkyrie_name, valkyrie_age, valkyrie_role):
        self.name = valkyrie_name
        self.age = valkyrie_age
        self.role = valkyrie_role
    
    def show_inf(self):
        print("%s：%d，%s" %(self.name, self.age, self.role))

Bronya_Zaychik = ValkyrieC("布洛妮娅", 16, "辅助")
Bronya_Zaychik.show_inf()
